#include "mongoose.h"
#define WWWROOT "./wwwroot/"

//事件
//MG_EV_CLOSE,       //当前连接断开了
//MG_EV_HTTP_MSG,    //事件是HTTP请求                   struct mg_http_message *
//MG_EV_WS_OPEN,     //有一个websocket连接握手完毕，有个客户端websocket建立成功
//MG_EV_WS_MSG,      //收到了一个websocket数据，有个客户端发送了一个聊天消息

void cb(struct mg_connection *c, int ev, void *ev_data, void *fn_data)
{
	//c就是当前有数据到来的连接，恢复数据也就是往这里回复
	//ev事件：MG_EV_HTTP_MSG-http请求
	//mg_http_serve_opts 选项数据结构，里边可以设置服务器相对根目录
	struct mg_http_serve_opts opts={.root_dir=WWWROOT};

	if(ev == MG_EV_HTTP_MSG){
		struct mg_http_message *hm =(struct mg_http_message*) ev_data;
		//ev_data中存储的就是http请求数据
		//mg_http_match_uri 根据请求中的资源路径辨别，收到了什么请求
		if(mg_http_match_uri(hm,"/hi")){
			//进行http响应
			mg_http_reply(c,200,"Connection-Type: text/html\r\n","<html><body><h1>%s</body></html>\n","hello,world");
		}else{
			//进行静态资源的处理
			mg_http_serve_dir(c,hm,&opts);
		}
		//如果以上请求处理都没有进入则函数返回后会返回404
	}
	return ;
}
int main()
{
	struct mg_mgr mgr;
	struct mg_connection *c;
	//初始化句柄
	mg_mgr_init(&mgr);
	//创建HTTP连接，有心连接则会自动处理连接
	//当冒个连接有http请求到来，内部会接受数据，解析http请求，然后调用cb回调函数进行处理
	c=mg_http_listen(&mgr,"0.0.0.0:19000",cb,&mgr);
	while(1){
		//开始循环监听当前所有的套接字，看谁有数据到来，然后调用回调函数进行处理
		mg_mgr_poll(&mgr,1000);
	}
	//释放句柄
	mg_mgr_free(&mgr);
	return 0;
}
